package com.michael.leetcode;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

@Slf4j
public class CountCompleteDayPairs_3184 {


    /*3184. 构成整天的下标对数目 I
    给你一个整数数组 hours，表示以 小时 为单位的时间，返回一个整数，表示满足 i < j 且 hours[i] + hours[j] 构成 整天 的下标对 i, j 的数目。
    整天 定义为时间持续时间是 24 小时的 整数倍 。
    例如，1 天是 24 小时，2 天是 48 小时，3 天是 72 小时，以此类推。

    示例 1：
    输入： hours = [12,12,30,24,24]

    输出： 2
    解释：
    构成整天的下标对分别是 (0, 1) 和 (3, 4)。

    示例 2：
    输入： hours = [72,48,24,3]
    输出： 3
    解释：
    构成整天的下标对分别是 (0, 1)、(0, 2) 和 (1, 2)。

    提示：

    1 <= hours.length <= 100
    1 <= hours[i] <= 109*/

    //思路  x y in hours and (x+y)%24 = 0
    public int countCompleteDayPairs(int[] hours) {
        int re =  0;
        for(int i = 0; i < hours.length-1; i++) {
            int x = hours[i];
            for(int j = i+1; j < hours.length; j++) {
                int y = hours[j];
                int cc = (x + y) % 24;
                if (cc == 0){
                    re++;
                }
            }
        }
        return re;
    }


    public int countCompleteDayPairs1(int[] hours) {
        int re =  0;
        Map<Integer, Integer > map = new HashMap<>();
        for (int i: hours){
            map.put(i%24, map.getOrDefault(i, 0)+1);
        }
        for (int i: hours){
            int c = 24 - i%24;
            if (map.containsKey(c)){
                map.put(c, map.get(c)-1);
                re++;
            }
        }
        return re;
    }


    @Test
    public void test(){
        int[] hours = {72,48,24,3};
        int i = countCompleteDayPairs1(hours);
        log.info("re {}",i);
    }
}